package com.yoyosys.common.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

/**
 * Spring配置文件读取工具类，支持nacos配置源
 *
 */
@Component
@Order(-2)
@Slf4j
public class PropertyUtil {

    private static Environment env;

    @Autowired
    private void setEnv(Environment environment){
        env = environment;
    }

    /**
     * 解析字符串中的占位符
     * @param text 含有占位符的字符串 如: App name is ${spring.application.name}
     * @return 替换占位符之后的字符串
     */
    public static String resolvePlaceholders(String text) {
        if(env == null){
            return text;
        }
        return env.resolvePlaceholders(text);
    }

    /**
     * @param name 配置文件中的参数名
     * @return
     */
    public static String getProperty(String name) {
        if(env == null){
            return null;
        }
        String config = env.getProperty(name);
        return config;
    }

    /**
     * @param name 配置文件中的参数名
     * @param defaultValue 配置文件中参数缺失时的默认值
     * @return
     */
    public static String getProperty(String name, String defaultValue) {
        String config = getProperty(name);
        if(config == null || "".equals(config.trim())){
            return defaultValue;
        }
        return config;
    }
    /**
     * @param name 配置文件中的参数名
     * @return
     */
    public static String getString(String name) {
        return getProperty(name);
    }
    /**
     * @param name 配置文件中的参数名
     * @param defaultValue 配置文件中参数缺失时的默认值
     * @return
     */
    public static String getString(String name, String defaultValue) {
        return getProperty(name, defaultValue);
    }
    /**
     * @param name 配置文件中的参数名
     * @return
     */
    public static Integer getInteger(String name) {
        String config = getProperty(name);
        return CommonUtil.toInteger(config);
    }
    /**
     * @param name 配置文件中的参数名
     * @param defaultValue 配置文件中参数缺失时的默认值
     * @return
     */
    public static Integer getInteger(String name, Integer defaultValue) {
        String config = getProperty(name);
        Integer value = CommonUtil.toInteger(config);
        if(value == null){
            value = defaultValue;
        }
        return value;
    }
    /**
     * @param name 配置文件中的参数名
     * @return
     */
    public static Long getLong(String name) {
        String config = getProperty(name);
        return CommonUtil.toLong(config);
    }
    /**
     * @param name 配置文件中的参数名
     * @param defaultValue 配置文件中参数缺失时的默认值
     * @return
     */
    public static Long getLong(String name, Long defaultValue) {
        String config = getProperty(name);
        Long value = CommonUtil.toLong(config);
        if(value == null){
            value = defaultValue;
        }
        return value;
    }
    /**
     * @param name 配置文件中的参数名
     * @return
     */
    public static Float getFloat(String name) {
        String config = getProperty(name);
        return CommonUtil.toFloat(config);
    }
    /**
     * @param name 配置文件中的参数名
     * @param defaultValue 配置文件中参数缺失时的默认值
     * @return
     */
    public static Float getFloat(String name, Float defaultValue) {
        String config = getProperty(name);
        Float value = CommonUtil.toFloat(config);
        if(value == null){
            value = defaultValue;
        }
        return value;
    }
    /**
     * @param name 配置文件中的参数名
     * @return
     */
    public static Double getDouble(String name) {
        String config = getProperty(name);
        return CommonUtil.toDouble(config);
    }
    /**
     * @param name 配置文件中的参数名
     * @param defaultValue 配置文件中参数缺失时的默认值
     * @returname
     */
    public static Double getDouble(String name, Double defaultValue) {
        String config = getProperty(name);
        Double value = CommonUtil.toDouble(config);
        if(value == null){
            value = defaultValue;
        }
        return value;
    }
    /**
     * @param name 配置文件中的参数名
     * @return
     */
    public static Boolean getBoolean(String name) {
        String config = getProperty(name);
        return CommonUtil.toBoolean(config);
    }
    /**
     * @param name 配置文件中的参数名
     * @param defaultValue 配置文件中参数缺失时的默认值
     * @return
     */
    public static Boolean getBoolean(String name, Boolean defaultValue) {
        String config = getProperty(name);
        Boolean value = CommonUtil.toBoolean(config);
        if(value == null){
            value = defaultValue;
        }
        return value;
    }

}

